<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
    <script>
        // var cb = $.Callbacks('stopOnFalse');
        // function a (op) {
        //     console.log('我是a', op);
        //     return false;
        // }
        // function b (op) {
        //     console.log('我是b', op);
        // }
        // function c () {
        //     console.log('我是c')
        // }
        // cb.add(a);
        // cb.add(b);
        // cb.add(a);
        // cb.remove(a);

        // cb.fire('fire');
        // cb.add(c);

        //         def.done()  // 注册成功的回掉函数
        // def.fail()	// 注册失败的回掉函数
        // def.progress()	// 注册正在进行时的回掉函数

        // def.resolve()	// 触发成功的回掉
        // def.reject()	    // 触发失败的回掉
        // def.notify()		// 触发正在进行的回掉
        // function test() {
        //     var def = $.Deferred();
        //     setTimeout(function () {
        //         var num = Math.random();
        //         if (num > 0.7) {
        //             def.resolve('ok 咱们交朋友吧');
        //         } else if (num > 0.4 && num < 0.7) {
        //             def.notify('我还没想好');
        //         } else {
        //             def.reject('滚  受不要脸');
        //         }
        //     }, 500);
        //     return def.promise()
        // }
        // var def = test();
        // def.then(function (arg) {
        //     var def2 = $.Deferred();
        //     console.log(arg);
        //     setTimeout(function() {
        //         var num = Math.random();
        //         if (num > 0.4) {
        //             def2.resolve('我们结婚吧');
        //         } else {
        //             def2.reject('你不是个人，拜拜');
        //         }
        //     }, 500)
        //     return def2.promise();
        // }, function (arg) {
        //     console.log(arg);
        // }, function (arg) {
        //     console.log(arg);
        // }).then(function(arg) {
        //     console.log(arg, 'ooooooo');
        // }, function(err) {
        //     console.log(err);
        // })
        // def.done(function(arg) {
        //     console.log('ok', arg);
        // })
        // def.fail(function(arg) {
        //     console.log(arg);
        // })
        // def.progress(function(arg) {
        //     console.log(arg)
        // })
        var pro = new Promise(function(resolve, reject) {
            setTimeout(function() {
                var num = Math.random();
                if (num > 0.6) {
                    resolve('过关');
                } else{
                    reject('没过');
                }
            }, 500)
        });
        pro.then(function(arg) {
            console.log(arg)
            return new Promise(function(res, rej) {
                var num = Math.random();
                if (num < 0.6) {
                    rej('哎呀 钱不够');
                } else{
                    res('欧克 去买车');
                }
            })
        }, function(arg) {
            console.log(arg)
        }).then(function(arg) {
            console.log(arg)
        }, function(err) {
            console.log(err)
        })
        console.log(5)
        function crePro (num, time) {
            return new Promise(function (res, rej) {
                setTimeout(function() {
                    if(num > 10) {
                        res('ok');
                    } else {
                        rej('no');
                    }
                }, time)
            });
        }
        // var allPro = Promise.all([crePro(11, 500), crePro(9, 500), crePro(12, 500),crePro(11, 500)])
        var racePro = Promise.race([crePro(11, 500), crePro(9, 400), crePro(11, 500), crePro(11, 500)])
        // allPro.then(function(arg) {
        //     console.log('allok', arg)
        // }, function(arg) {
        //     console.log(arg)
        // })
        racePro.then(function(arg) {
            console.log(arg)
        }, function(err) {
            console.log(err)
        })
    </script>
</body>

</html>